python3小白课:for表达式
for表达式基本使用
for表达式通常用于使用区间、元组、列表等可迭代对象来创建新的列表,在实战中的某些场景偶尔会用到,如果掌握比较困难,也可以不学这个。for表达式的语法如下:
[表达式 for 循环变量 in 可迭代对象]
for表达式只有一行,跟一般的循环结构是有点区别的,我们对比一下,它将表达式放到了for的前面,表达式部分就是我们之前讲for-in循环时的执行体部分,然后我们还注意到,外面增加了一个[],表示将生成的结果生成一个列表来包裹起来,最终返回一个列表,所以有时候我们也称之为列表推导式。
我们来看个小例子:
# coding:utf-8
a = range(5)
# 我们来获取一下a这个列表每个元素的平方的新列表
b = [x * x for x in a]
print(b)
# 我们还能添加if条件在后面,满足条件元素为偶数的才计算
b = [x * x for x in a if x % 2 == 0]
print(b)
[!question]
有的同学会想,如果我们将表达式的
[]换成()是否可以呢?将列表换成元组,会生成一个元组吗?
我们来看一下。
# coding:utf-8
a = range(5)
b = (x * x for x in a)
print(b)
print(type(b))
我们会发现,返回的是一个generator对象,这个对象是一个生成器,是可以迭代的,我们可以使用for-in循环迭代。
# coding:utf-8
a = range(5)
b = (x * x for x in a)
for i in b:
print(i)
for表达式支持嵌套
for表达式也支持嵌套,两层或者三层的循环嵌套也是可以的,当然如果有if条件的需要也可以加上。
# coding:utf-8
# 我们拿稍微简单一点的两层循环嵌套来说明写法
a = [(x, y) for x in range(5) for y in range(3) if x > y]
print(a)
# 上述写法跟这样的写法是一样的:
a = []
for x in range(5):
for y in range(3):
if x > y:
a.append((x, y))
print(a)
看,是不是方便许多?
zip压缩函数
这里我们小小的介绍一个有用的函数zip压缩函数。它可不是我们日常理解的一种压缩文件命令,而是可以将几个列表压缩成一个zip对象(可迭代对象),这样可以使用循环来并行遍历两个列表了。
我们来看个小小的例子:
# coding:utf-8
a = ['a', 'b', 'c']
b = [4, 5, 6]
c = [x for x in zip(a, b)]
print(c)
可以看到,我们将两个列表压缩成了多个元组组合,最后再生成个列表,就是一个列表了。
如果两个列表成员数不一致会怎么样呢?
# coding:utf-8
a = ['a', 'b', 'c']
b = [4, 5]
c = [x for x in zip(a, b)]
print(c)
可以看到效果是以短的列表为准来进行压缩。
这个函数大家知道一下即可。
单词释义
| 单词 | 释义 |
|---|---|
| zip | 压缩 |